package com.dtlaya.allutils.fileTranction.controller;

import com.dtlaya.allutils.fileTranction.FileStorageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.nio.file.Files;
import java.util.List;

@RestController
@RequestMapping("/api/files")
public class FileController {

    private final FileStorageService fileStorageService;

    @Autowired
    public FileController(FileStorageService fileStorageService) {
        this.fileStorageService = fileStorageService;
    }

    /**
     * 根据SeriesId下载第一个文件
     * @param seriesId 系列ID
     * @return 文件响应
     */
    @GetMapping("/series/{seriesId}")
    public ResponseEntity<Resource> downloadFileBySeriesId(@PathVariable String seriesId) {
        // 在实际应用中，这里应该查询数据库确定要返回哪个文件
        Resource resource = fileStorageService.loadFileBySeriesId(seriesId);

        // 确定内容类型
        String contentType = "application/octet-stream";
        try {
            contentType = Files.probeContentType(resource.getFile().toPath());
        } catch (IOException ex) {
            // 使用默认内容类型
        }

        return ResponseEntity.ok()
                .contentType(MediaType.parseMediaType(contentType))
                .header(HttpHeaders.CONTENT_DISPOSITION, 
                       "attachment; filename=\"" + resource.getFilename() + "\"")
                .body(resource);
    }

    /**
     * 获取Series下的所有文件列表
     * @param seriesId 系列ID
     * @return 文件列表
     */
    @GetMapping("/series/{seriesId}/list")
    public List<String> listFilesBySeriesId(@PathVariable String seriesId) {
        return fileStorageService.listFilesBySeriesId(seriesId);
    }
}